package com.tfjybj.msg.commons.exceptionhandler;

import com.tfjybj.msg.commons.utils.MsgResult;
import com.tfjybj.msg.commons.utils.ResultCode;
import com.tfjybj.msg.commons.utils.ResultMessage;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestControllerAdvice;

import java.util.NoSuchElementException;

/**
 * @Description: 统一异常处理
 * @Author: xuziguo
 * @Date: 2021/4/17 下午 3:07
 * @Modified By:
 * @Modify Date:
 */
@RestControllerAdvice
public class GlobalExceptionHandler {

    /**
     * @description: 全局异常处理
     * @author: xuziguo
     * @date: 2021/4/17 下午 3:20
     * @param: [e]
     * @return: com.tfjybj.msg.commons.utils.MsgResult
     */
    @ExceptionHandler(value = Exception.class) //出现Exception时执行
    @ResponseBody //出现异常能返回数据
    public MsgResult error(Exception e) {
        e.printStackTrace();
        return MsgResult.build(ResultCode.ERROR, ResultMessage.ERRORINFO);
    }

    /**
     * @description: Optional 的空指针处理
     * @author: xuziguo
     * @date: 2021/4/20 上午 10:13
     * @param: [e]
     * @return: com.tfjybj.msg.commons.utils.MsgResult
     */
    @ExceptionHandler(value = NoSuchElementException.class)
    @ResponseBody
    public MsgResult error(NoSuchElementException e) {
        e.printStackTrace();
        return MsgResult.build(ResultCode.EMPTY, ResultMessage.NULL);
    }

    /**
     * @description: 自定义异常处理
     * @author: xuziguo
     * @date: 2021/4/17 下午 3:29
     * @param: [e]
     * @return: com.tfjybj.msg.commons.utils.MsgResult
     */
    @ExceptionHandler(value = MsgException.class) //出现Exception时执行
    @ResponseBody
    public MsgResult error(MsgException e) {
        e.printStackTrace();
        return MsgResult.build(e.getMsg(), e.getMsg());
    }

}
